import request from "@/utils/request";

/**
 * 排行榜周期类型
 */
export type LeaderboardPeriod = "daily" | "weekly" | "monthly" | "all";

/**
 * 排行榜查询参数
 */
export interface LeaderboardQuery {
  period?: string;
  limit?: number;
}

/**
 * 排行榜用户信息
 */
export interface LeaderboardUser {
  /** 用户ID */
  id: number;
  /** 用户名 */
  username: string;
  /** 用户头像 */
  avatar: string;
  /** 积分 */
  points: number;
  /** 等级 */
  level: number;
  /** 排名 */
  rank: number;
  /** 排名趋势变化 */
  trend?: number;
}

/**
 * 积分表单
 */
export interface PointsForm {
  /** 用户ID（可选） */
  userId?: number;
  /** 积分 */
  points: number;
  /** 积分来源类型 */
  actionType: string;
  /** 积分描述 */
  description: string;
}

/**
 * 获取排行榜列表
 *
 * @param params 查询参数
 * @returns 排行榜列表
 */
export function getLeaderboard(params: LeaderboardQuery) {
  return request({
    url: '/api/v1/game/leaderboard',
    method: 'get',
    params
  });
}

/**
 * 获取当前用户排名
 *
 * @param period 时间段
 * @returns 用户排名信息
 */
export function getUserRank(period?: string) {
  return request({
    url: '/api/v1/game/leaderboard/user-rank',
    method: 'get',
    params: { period }
  });
}

/**
 * 更新用户积分
 *
 * @param data 积分表单数据
 * @returns 是否成功
 */
export function updatePoints(data: PointsForm) {
  return request({
    url: '/api/v1/game/leaderboard/points',
    method: 'post',
    data
  });
}

/**
 * 获取用户积分历史
 *
 * @param pageNum 页码
 * @param pageSize 每页条数
 * @returns 积分历史列表
 */
export function getPointsHistory(pageNum: number = 1, pageSize: number = 10) {
  return request({
    url: '/api/v1/game/leaderboard/points/history',
    method: 'get',
    params: { pageNum, pageSize }
  });
} 